首页 > 编程笔记

C# StringBuilder类用法详解

C# 中对于创建成功的 string 字符串,它的长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 string 对象,并在内存中创建新的字符串对象。如果重复地对字符串进行修改,将会极大地增加系统开销。

C# 中提供了一个可变的字符序列 StringBuilder 类,大大提高了频繁修改字符串的效率,本节对可变字符串类的使用进行讲解。

StringBuilder类的定义

StringBuilder 类位于 System.Text 命名空间中,如果要创建 StringBuilder 对象,首先必须引用该命名空间。

StringBuilder 类有 6 种不同的构造方法,分别如下:
public StringBuilder()
public StringBuilder(int capacity)
public StringBuilder(string value)
public StringBuilder(int capacity,int maxCapacity)
public StringBuilder(string value,int capacity)
public StringBuilder(string value,int startIndex,int length,int capacity)
其中,各个参数的含义是:
例如,创建一个 StringBuilder 对象,其初始引用的字符串为“Hello World!”,代码如下:
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
StringBuilder 类表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为在创建它后可以通过追加、移除、替换或插入字符而对它进行修改。

StringBuilder类的使用

StringBuilder 类中的常用方法及说明如下表所示。

表 1 StringBuilder类中的常用方法及说明
方 法 说 明
Append 将文本或字符串追加到指定对象的末尾
AppendFormat 自定义变量的格式并将这些值追加到 StringBuilder 对象的末尾
Insert 将字符串或对象添加到当前 StringBuilder 对象中的指定位置
Remove 从当前 StringBuilder 对象中移除指定数量的字符
Replace 用另一个指定的字符来替换 StringBuilder 对象内的字符

StringBuilder 类提供的方法都有多种使用形式,开发者可以根据需要选择合适的使用形式。

【实例】创建一个控制台应用程序,声明一个 int 类型的变量 Num,并初始化为 368;然后创建一个 StringBuilder 对象 SBuilder,其初始值为“C语言”;之后分别使用 StringBuilder 类的 Append、AppendFormat、Insert、Remove 和 Replace 方法对 StringBuilder 对象进行操作,并输出相应的结果。
static void Main(string[] args)
{
     int Num = 666; //声明一个int类型变量Num并初始化为368
     //实例化一个StringBuilder类,并初始化为"明日科技"
     StringBuilder SBuilder = new StringBuilder("C语言");
     //使用Append方法将字符串追加到SBuilder的末尾
     SBuilder.Append("中文网");
     Console.WriteLine(SBuilder);     //输出SBuilder
     //使用AppendFormat方法将字符串按照指定的格式追加到SBuilder的末尾
     SBuilder.AppendFormat("{0:C0}", Num);
     Console.WriteLine(SBuilder);     //输出SBuilder
     //使用Insert方法将"网站:"追加到SBuilder的开头
     SBuilder.Insert(0, "网站:");
     Console.WriteLine(SBuilder);      //输出SBuilder
     //使用Remove方法从SBuilder中删除索引为14处后的字符串
     SBuilder.Remove(14, SBuilder.Length - 14);
     Console.WriteLine(SBuilder);     //输出SBuilder
     //使用Replace方法将"网站:"替换成"编程入门:"
     SBuilder.Replace("网站:", "编程入门:");
     Console.WriteLine(SBuilder);     //输出SBuilder
     Console.ReadLine();
}
运行结果为:

C语言中文网
C语言中文网666
网站:C语言中文网666
网站:C语言中文网
编程入门:C语言中文网

StringBuilder与string的区别

string 本身是不可改变的,它只能赋值一次,每一次内容发生改变都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低 .NET 编译器的工作效率。

string 操作示意图如下图所示。


图 1 string操作示意图

而 StringBuilder 类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

StringBuilder 操作示意图如下图所示。


图 2 StringBuilder操作示意图

当程序中需要大量地对某个字符串进行操作时,应该考虑应用 StringBuilder 类处理该字符串,其设计目的就是针对大量 string 操作的一种改进办法,以避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用 string 类即可。

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。